package com.hmsm.server.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DateUtil {
	
    /**
     *根据时间范围获得月份集
     * @return
     */
    public static List<String> getRangeSet(String beginDate,String endDate){
        /*      Date1.after(Date2),当Date1大于Date2时，返回TRUE，当小于等于时，返回false； 
          Date1.before(Date2)，当Date1小于Date2时，返回TRUE，当大于等于时，返回false； 
          如果业务数据存在相等的时候，而且相等时也需要做相应的业务判断或处理时，你需要使用：！Date1.after(Date2);*/
        List<String> rangeSet =null;
        SimpleDateFormat sdf = null;
          Date begin_date = null;
          Date end_date = null;
          rangeSet = new java.util.ArrayList<String>();
          sdf = new SimpleDateFormat("yyyy-MM");
        try {
              begin_date = sdf.parse(beginDate);//定义起始日期
              end_date = sdf.parse(endDate);//定义结束日期
        } catch (ParseException e) {
            System.out.println("时间转化异常，请检查你的时间格式是否为yyyy-MM或yyyy-MM-dd");
        }
		Calendar dd = Calendar.getInstance();//定义日期实例
          dd.setTime(begin_date);//设置日期起始时间
          while(!dd.getTime().after(end_date)){//判断是否到结束日期
              rangeSet.add(sdf.format(dd.getTime()));
              dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
          }
          return rangeSet;
    }    
 
 
 
    /**
     *根据时间范围获得季度集
     * @return
     */
    public static List<String> getRangeSet_Q(String beginDate,String endDate){
        /*      Date1.after(Date2),当Date1大于Date2时，返回TRUE，当小于等于时，返回false； 
          Date1.before(Date2)，当Date1小于Date2时，返回TRUE，当大于等于时，返回false； 
          如果业务数据存在相等的时候，而且相等时也需要做相应的业务判断或处理时，你需要使用：！Date1.after(Date2);*/
        List<String> rangeSet =null;
        SimpleDateFormat sdf = null;
          Date begin_date = null;
          Date end_date = null;
          String[] numStr =null;
          String Q=null;
          rangeSet = new java.util.ArrayList<String>();
          sdf = new SimpleDateFormat("yyyy-MM");
        try {
              begin_date = sdf.parse(beginDate);//定义起始日期
              end_date = sdf.parse(endDate);//定义结束日期
        } catch (ParseException e) {
            System.out.println("时间转化异常，请检查你的时间格式是否为yyyy-MM或yyyy-MM-dd");
        }
          Calendar dd = Calendar.getInstance();//定义日期实例
          dd.setTime(begin_date);//设置日期起始时间
          while(!dd.getTime().after(end_date)){//判断是否到结束日期
              numStr=  sdf.format(dd.getTime()).split("-",0);
              Q = getQuarter(Integer.valueOf(numStr[1]))+"";
              System.out.println(numStr[0].toString()+"年"+numStr[1].toString()+"月"+"为"+numStr[0].toString()+"年第"+Q+"季");
              rangeSet.add(Q);
              dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
          }
          return rangeSet;
    }    
 
    /**
     * 根据月获得季度
     * @param month  月
     * @return  季度
     */
    public static int getQuarter(int month) {
        return (month-1) % 12/3;
    }

    /**
     * MySQL WEEK(date[,mode])
     * 模式	星期的第一天	范围	星期 1 是第一天
     *  0	Sunday			0-53	一年中多一个星期天
     *  1	Monday			0-53	一年多3天
     *  2	Sunday			1-53	一年中多一个星期天
     *  3	Monday			1-53	一年多3天
     *  4	Sunday			0-53	一年多3天
     *  5	Monday			0-53	一年中多一个星期一
     *  6	Sunday			1-53	一年多3天
     *  7	Monday			1-53	一年中多一个星期一
     * @param date
     * @param mode
     * @return
     */
	public static int getWeek(Date date, int mode) {
		int week = 0;
          
        Calendar calendar = Calendar.getInstance();  
        calendar.setFirstDayOfWeek(Calendar.MONDAY);  
        calendar.setTime(date);  
          
        week = calendar.get(Calendar.WEEK_OF_YEAR);      
		
		return week;
	}
    
    public static void main(String[] area) {
        
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
        String today = "2018-12-";
        for(int d = 1;d<=31;d++) {
            Date date = parseDate(today+d, format);  
            
            System.out.println(today+d+":"+getWeek(date, 0));
        }
        
    }



	private static Date parseDate(String today, SimpleDateFormat format) {
		Date date = null;  
        try {  
            date = format.parse(today);  
        } catch (ParseException e) {  
            e.printStackTrace();  
        }
		return date;
	}
}
